﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using JA.Negocios;
using System.IO;

namespace JA.Web.Apresentacao
{
    public partial class CadastroParametro : System.Web.UI.Page
    {
        UsuarioVO userVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            userVO = (UsuarioVO)this.Session["userActive"];
            if (userVO == null || !userVO.cadPar )
                Response.Redirect("~/BackOffice.aspx");

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
            }

        }

        protected void checkBoxCript_CheckedChanged(object sender, EventArgs e)
        {
            this.txtCadParametro.TextMode = (this.cbCript.Checked?TextBoxMode.Password:TextBoxMode.SingleLine); 
        }

        /// <summary>
        /// Manipula o evento do botão btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            ParametroVO parametroVO = null;
            bool novoRegistro = false;

            try
            {
                //Recupera dados
                List<ParametroVO> parametroVOs = ModelBO.getParametros(this.txtCadId.Text, false);
                if (parametroVOs != null && parametroVOs.Count > 0)
                {
                    parametroVO = parametroVOs[0];
                }

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (parametroVO==null)
                {
                    parametroVO = ParametroVO.CreateParametroVO();
                    parametroVO.idParametro = this.txtCadId.Text;
                    parametroVO.criptografado = this.cbCript.Checked;
                    novoRegistro = true;

                }

                parametroVO.parametro = this.txtCadParametro.Text;

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    ModelBO.newParametro(parametroVO);
                else
                    ModelBO.setParametro(parametroVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";
                this.cbCript.Checked = false;
                this.txtCadParametro.TextMode = TextBoxMode.SingleLine;

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            string idParametro = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idParametro = this.txtId.Text;
                }

                //
                this.grvResultado.DataSource = ModelBO.getParametros(idParametro, true);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabParametro.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava botão de edição
            this.btnEditar.Enabled = false;
            if (!string.IsNullOrEmpty(this.txtCadId.Text))
                this.btnEditar.Enabled = true;

            // Detrava botão de exclusao
            this.btnExcluir.Enabled = false;
            if (!string.IsNullOrEmpty(this.txtCadId.Text))
                this.btnExcluir.Enabled = true;

            // Detrava botão de novo
            this.btnNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            ParametroVO parametroVO = null;
            string idParametro = "";

            try
            {
                //
                idParametro = ((ImageButton)sender).CommandArgument;

                List<ParametroVO> parametroVOs = ModelBO.getParametros(idParametro, false);
                parametroVO = parametroVOs[0];

                this.txtCadId.Text = idParametro;
                this.txtCadParametro.Text = parametroVO.parametro;
                this.cbCript.Checked = parametroVO.criptografado;
                this.txtCadParametro.TextMode = (parametroVO.criptografado ? TextBoxMode.Password : TextBoxMode.SingleLine);

                //
                this.tabParametro.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = true;

                //
                this.btnExcluir.Enabled = true;

                //
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadParametro.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";
            this.cbCript.Checked = false;
            this.txtCadParametro.TextMode = TextBoxMode.SingleLine;

            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            //this.txtCadId.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadId.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            ParametroVO parametroVO = null;

            try
            {
                //Cria objeto
                parametroVO = ParametroVO.CreateParametroVO();

                parametroVO.idParametro = this.txtCadId.Text;

                //Chama metodo para salvar ou criar novo registro
                ModelBO.delParametro(parametroVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";
                this.cbCript.Checked = false;
                this.txtCadParametro.TextMode = TextBoxMode.SingleLine;

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }
    }
}
